/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dao.impl;

import java.io.Serializable;
import java.util.Collection;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import pe.com.cotelasa.common.dao.DaoImpl;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOUnidadMedidaComp;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.entidad.UnidadMedidaComp;

/**
 *
 * @author usuario
 */
@Repository("daoUnidadMedidaComp")
public class DAOUnidadMedidaCompImpl extends DaoImpl<UnidadMedidaComp, Integer> implements IDAOUnidadMedidaComp, Serializable {

    @Autowired
    private SessionFactory sessionFactory;
    
    @Transactional
    public UnidadMedidaComp conseguirUnidadMedidaCompPorvalCadena(String valCadena) throws DAOException {
        UnidadMedidaComp unidadMedidaCompBuscado = null;
        try {
            unidadMedidaCompBuscado = (UnidadMedidaComp) sessionFactory.getCurrentSession().createCriteria(UnidadMedidaComp.class)
                    .add(Restrictions.eq("valCadena", valCadena))
                    .add(Restrictions.eq("estadoRegistro", ESTADO_REGISTRO.ACTIVO.getValor()))
                    .uniqueResult();
        } catch (Exception e) {
            System.err.println(e);
            throw new DAOException(e.getMessage(), e);
            
        }
        return unidadMedidaCompBuscado;
    }
    

    @Override
    public Collection<UnidadMedidaComp> listarUnidadMedidaCompPorFiltro(UnidadMedidaComp unidadMedidaComp) throws DAOException {
        Collection<UnidadMedidaComp> unidadMedidaCompBuscado = null;
        try {
            unidadMedidaCompBuscado = sessionFactory.getCurrentSession().createCriteria(UnidadMedidaComp.class)
                    .createAlias("idTipoUnidadMinima", "um")
                    .add(Restrictions.eq("um.abrev", unidadMedidaComp.getIdTipoUnidadMinima().getAbrev()))
                    .add(Restrictions.eq("estadoRegistro", ESTADO_REGISTRO.ACTIVO.getValor()))
                    .list();
        } catch (Exception e) {
            System.err.println(e);
            e.printStackTrace();
            throw new DAOException(e.getMessage(), e);
            
        }
        return unidadMedidaCompBuscado;
    }
    
    @Override
    public Collection<UnidadMedidaComp> listarUnidadMedidaCompPorUM(UnidadMedidaComp unidadMedidaComp) throws DAOException {
        Collection<UnidadMedidaComp> unidadMedidaCompBuscado = null;
        System.out.println("abrev: "+unidadMedidaComp.getIdTipoUnidadMinima().getAbrev());
        try {
            unidadMedidaCompBuscado = sessionFactory.getCurrentSession().createCriteria(UnidadMedidaComp.class)
                    .add(Restrictions.eq("idTipoUnidadMinima", unidadMedidaComp.getIdTipoUnidadMinima()))
                    .add(Restrictions.eq("estadoRegistro", ESTADO_REGISTRO.ACTIVO.getValor()))
                    .list();
        } catch (Exception e) {
            System.err.println(e);
            e.printStackTrace();
            throw new DAOException(e.getMessage(), e);
            
        }
        return unidadMedidaCompBuscado;
    }
}
